package qc.module.platform.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.module.platform.entity.QcRoleApi;
import qc.module.platform.repository.QcRoleApiRepository;

import java.util.List;
import java.util.stream.Collectors;

/**
 * RoleApiService
 *
 * @author QuCheng Tech
 * @create 2024/5/6
 */
@Service
public class RoleApiService {
    
    @Autowired
    private QcRoleApiRepository repository;

    /***
     * 根据指定的角色ID获取关联的api唯一标识集合
     *
     * @param roleId 角色ID
     * @return java.util.List<java.lang.String>
     * @author QuCheng Tech
     * @since 2024/5/7
     */
    public List<String> getApis(Integer roleId) {
        LambdaQueryWrapper<QcRoleApi> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(QcRoleApi::getApi);
        wrapper.eq(QcRoleApi::getRoleid, roleId);
        //查询数据
        List<QcRoleApi> ens = repository.selectList(wrapper);
        if (ens != null && ens.size() > 0x0) {
            return ens.stream().map(QcRoleApi::getApi).collect(Collectors.toList());
        }

        return null;
    }
    
    /**
     * 删除角色与api的关联关系
     *
     * @param roleId 角色id
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/5/8
     */
    public void deleteByRoleId(Integer roleId) {
        LambdaUpdateWrapper<QcRoleApi> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(QcRoleApi::getRoleid, roleId);
        repository.delete(wrapper);
    }

    /**
     * 添加角色api关联关系
     *
     * @param roleId 角色id
     * @param api api唯一标识
     * @author QuCheng Tech
     * @since 2024/5/8
     */
    public void add(Integer roleId, String api) {
        //判断角色api是否已经关联，如果已经关联则不添加
        if (!hasExist(roleId, api)) {
            QcRoleApi en = new QcRoleApi();
            en.setRoleid(roleId);
            en.setApi(api);
            repository.insert(en);
        }
    }

    /**
     * 判断关联关系是否存在
     *
     * @param roleId 角色ID
     * @param api api唯一标识
     * @return boolean
     * @author QuCheng Tech
     * @since 2024/5/8
     */
    public boolean hasExist(Integer roleId, String api) {
        LambdaQueryWrapper<QcRoleApi> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(QcRoleApi::getRoleid, roleId);
        wrapper.eq(QcRoleApi::getApi, api);

        QcRoleApi en = repository.selectOne(wrapper);
        if (en != null)
            return true;

        return false;
    }
    
}
